﻿using AutoMapper;
using B.S.Domain.Generateplan;
using B.S.Infratrctrue;
using B.S.Requst;
using MediatR;
using Microsoft.EntityFrameworkCore;

namespace B.S.Data.MES.API.Applications.GenerateItemsApplication
{
    /// <summary>
    /// 更新生产计划物品处理器
    /// </summary>
    public class UpdateGenerateItemsCommandHorter : IRequestHandler<UpdateGenerateItemsCommand, APIRequst<int>>
    {
        private readonly IBaseRepository<GenerateItems> _repository;
        private readonly IMapper _mapper;

        public UpdateGenerateItemsCommandHorter(IBaseRepository<GenerateItems> repository, IMapper mapper)
        {
            _repository = repository;
            _mapper = mapper;
        }

        public async Task<APIRequst<int>> Handle(UpdateGenerateItemsCommand request, CancellationToken cancellationToken)
        {
            try
            {
                // 查找要更新的物品
                var generateItem = await _repository.GetAll()
                    .Where(x => x.GenerateItemsId == request.GenerateItemsId && x.IsDel == false)
                    .FirstOrDefaultAsync(cancellationToken);

                if (generateItem == null)
                {
                    return new APIRequst<int>
                    {
                        Code = RequstCode.失败,
                        Msg = "物品不存在",
                        Data = 0
                    };
                }

                // 检查物品编号是否与其他物品重复
                var existingItem = await _repository.GetAll()
                    .Where(x => x.ItemNumber == request.ItemNumber && 
                               x.GenerateItemsId != request.GenerateItemsId && 
                               x.IsDel == false)
                    .FirstOrDefaultAsync(cancellationToken);

                if (existingItem != null)
                {
                    return new APIRequst<int>
                    {
                        Code = RequstCode.失败,
                        Msg = "物品编号已存在",
                        Data = 0
                    };
                }

                // 更新物品信息
                generateItem.ItemNumber = request.ItemNumber;
                generateItem.ItemName = request.ItemName;
                generateItem.SpecificationModel = request.SpecificationModel;
                generateItem.Unit = request.Unit;
                generateItem.ItemCategory = request.ItemCategory;
                generateItem.ItemClassification = request.ItemClassification;
                generateItem.Brand = request.Brand;
                generateItem.OrderName = request.OrderName;
                generateItem.GenerateplanBasicId = request.GenerateplanBasicId;

                // 保存到数据库
                await _repository.Update(generateItem);

                return new APIRequst<int>
                {
                    Code = RequstCode.成功,
                    Msg = "更新成功",
                    Data = generateItem.GenerateItemsId
                };
            }
            catch (Exception ex)
            {
                return new APIRequst<int>
                {
                    Code = RequstCode.失败,
                    Msg = $"更新失败：{ex.Message}",
                    Data = 0
                };
            }
        }
    }
}
